//
//  NSArray+UtilsExtras.h
//  EVTUtils
//
//  Created by xeon well on 3/7/12.
//  Copyright (c) 2012 eightcolor, Inc. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSArray (UtilsExtras)
//安全获取数组第一个元素
- (id)firstObject;

//安全获取数组里的元素
- (id)safeGetObjectAtIndex:(NSUInteger)index;

/**
 指定两端索引，返回一个新的子数组，会判断传入参数的合理性
 @param fromIndex 起始点
 @param toIndex 结束点
 */
- (NSArray *)subarrayFromIndex:(NSUInteger)fromIndex toIndex:(NSUInteger)toIndex;

/**
 将传入的参数合并到数组，如果传入的是一个数组，将展开一次。该方法来自js的array.concat方法, 注意需要以nil结尾
 NSArray *originalArray = @[@1,@2,@3];
 NSArray *resultArray = [originalArray concat:@2,@"asdf",@{@"1" : @"2"}, @[@"a",@"b", @[@"c",@"d"]], nil];
 resultArray = @[@1,@2,@3,@2,@"asdf",@{@"1" : @"2"}, @"a", @"b", @[@"c",@"d"]];
 @param obj 传入要合并的对象
 */
- (NSArray *)concatWithObjects:(id)obj, ... NS_REQUIRES_NIL_TERMINATION;

/**
 将传入的数组合并到数组，如果数组的子元素是一个数组，将展开一次。
 @param concatArray 传入要合并的数组
 @return 合并后的数组
 */
- (NSArray *)concatWithArray:(NSArray *)concatArray;


#pragma mark - 数组转json数组
/**
 数组转json数组字符串
 @param array 传入数组
 */
- (NSString *)arrayTurnJson:(NSArray *)array;
@end


@interface NSMutableArray (PDUtilsExtras)
//弹出栈顶的元素并返回该元素
- (id)pop;

//移除第一个元素并返回该元素
- (id)shift;

//安全添加对象
- (void)safeAddObject:(id)anObject;

/**
 将数组中指定位置的元素移动到新的位置
 @param fromIndex 要挪动的元素索引
 @param toIndex 元素新位置索引
 */
- (void)moveObjectFromIndex:(NSUInteger)fromIndex toIndex:(NSUInteger)toIndex;
@end
